package com.bi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bi.entity.ThemeScenario;
import com.bi.entity.ThemeScenarioComponent;

import java.util.List;
import java.util.Map;

/**
 * 主题场景服务接口
 * 
 * @author BI Platform Team
 * @since 1.0.0
 */
public interface ThemeScenarioService extends IService<ThemeScenario> {

    /**
     * 分页查询主题场景
     */
    IPage<ThemeScenario> getThemeScenarioPage(long current, long size, Map<String, Object> params);

    /**
     * 创建主题场景
     */
    boolean createThemeScenario(ThemeScenario themeScenario, List<ThemeScenarioComponent> components);

    /**
     * 更新主题场景
     */
    boolean updateThemeScenario(ThemeScenario themeScenario, List<ThemeScenarioComponent> components);

    /**
     * 删除主题场景
     */
    boolean deleteThemeScenario(Long scenarioId);

    /**
     * 复制主题场景
     */
    ThemeScenario copyThemeScenario(Long sourceScenarioId, String newName);

    /**
     * 发布主题场景
     */
    boolean publishThemeScenario(Long scenarioId);

    /**
     * 归档主题场景
     */
    boolean archiveThemeScenario(Long scenarioId);

    /**
     * 获取场景组件列表
     */
    List<ThemeScenarioComponent> getScenarioComponents(Long scenarioId);

    /**
     * 获取场景组件树
     */
    List<ThemeScenarioComponent> getScenarioComponentTree(Long scenarioId);

    /**
     * 添加场景组件
     */
    boolean addScenarioComponent(ThemeScenarioComponent component);

    /**
     * 更新场景组件
     */
    boolean updateScenarioComponent(ThemeScenarioComponent component);

    /**
     * 删除场景组件
     */
    boolean removeScenarioComponent(Long componentId);

    /**
     * 更新组件排序
     */
    boolean updateComponentOrder(List<ThemeScenarioComponent> components);

    /**
     * 更新组件位置
     */
    boolean updateComponentPosition(Long componentId, String positionConfig);

    /**
     * 更新组件层级
     */
    boolean updateComponentZIndex(Long componentId, Integer zIndex);

    /**
     * 根据场景类型查询
     */
    List<ThemeScenario> getByScenarioType(String scenarioType);

    /**
     * 根据应用类型查询
     */
    List<ThemeScenario> getByApplicationType(String applicationType);

    /**
     * 搜索主题场景
     */
    List<ThemeScenario> searchThemeScenarios(String keyword, String scenarioType, String applicationType);

    /**
     * 获取推荐场景
     */
    List<ThemeScenario> getRecommendedScenarios(Integer limit);

    /**
     * 获取热门场景
     */
    List<ThemeScenario> getPopularScenarios(Integer limit);

    /**
     * 获取我的场景
     */
    List<ThemeScenario> getMyScenarios(String creator);

    /**
     * 获取场景统计信息
     */
    Map<String, Object> getScenarioStatistics();

    /**
     * 访问场景（增加访问次数）
     */
    boolean accessScenario(Long scenarioId);

    /**
     * 给场景评分
     */
    boolean rateScenario(Long scenarioId, Double rating);

    /**
     * 从模板创建场景
     */
    ThemeScenario createFromTemplate(Long templateId, String scenarioName, String description);

    /**
     * 保存为模板
     */
    boolean saveAsTemplate(Long scenarioId, String templateName, String templateDescription);

    /**
     * 导出场景
     */
    Map<String, Object> exportScenario(Long scenarioId);

    /**
     * 导入场景
     */
    ThemeScenario importScenario(Map<String, Object> scenarioConfig);

    /**
     * 预览场景
     */
    Map<String, Object> previewScenario(Long scenarioId);

    /**
     * 生成访问路径
     */
    String generateAccessPath(Long scenarioId);
}